package Question18_13; import java.util.ArrayList; import java.util.Hashtable; import java.util.LinkedList; /* A container for a group of words of the same length. */ public class WordGroup { private Hashtable<String, Boolean> lookup = new Hashtable<String, Boolean>(); private ArrayList<String> group = new ArrayList<String>(); public WordGroup() { } public boolean containsWord(String s) { return lookup.containsKey(s); } public void addWord (String s) { group.add(s); lookup.put(s, true); } public int length() { return group.size(); } public String getWord(int i) { return group.get(i); } public ArrayList<String> getWords(){ return group; } public static WordGroup[] createWordGroups(String[] list) { WordGroup[] groupList; int maxWordLength = 0; // Find out the length of the longest word for (int i = 0; i < list.length; i++) { if (list[i].length() > maxWordLength) { maxWordLength = list[i].length(); } } /* Group the words in the dictionary into lists of words of * same length.groupList[i] will contain a list of words, each * of length (i+1). */ groupList = new WordGroup[maxWordLength]; for (int i = 0; i < list.length; i++) { /* We do wordLength - 1 instead of just wordLength since this is used as * an index and no words are of length 0 */ int wordLength = list[i].length() - 1; if (groupList[wordLength] == null) { groupList[wordLength] = new WordGroup(); } groupList[wordLength].addWord(list[i]); } return groupList; } }